﻿using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Idiom.Models
{
    public class IdiomModelsRepository //: IIdiomModelsRepository
    {
        public async Task<int> InsertIdiomModelAsync(IdiomModel idiomModel)
        {
            using (var context = new IdiomContext())
            {

                if (!await context.IdiomModels.AnyAsync(i => i.Character == idiomModel.Character))
                {
                    await context.IdiomModels.AddAsync(idiomModel);
                }
                return await context.SaveChangesAsync();
            }
        }

        public Task InsertIdiomModels(List<TempModle> tempModels)
        {
            using (var context = new IdiomContext())
            {
                int i = 0;
                tempModels.ForEach(t =>
                {
                    i++;
                    IdiomModel idiomModel = new IdiomModel
                    {

                        Character = t.Character,
                        Pinyin = t.Pinyin,
                        Interpretation = t.Interpretation,
                        Originate = t.Originate

                    };
                    Console.WriteLine(i.ToString() + ":" + idiomModel.Character);
                    context.IdiomModels.AddAsync(idiomModel);


                });
                context.SaveChanges();
                return Task.CompletedTask;
            }

        }

        public async Task<Sentence> InsertSentenceAsync(Sentence sentence)
        {
            using (var context = new IdiomContext())
            {
                Sentence s = sentence;

                if (!await context.Sentences.AnyAsync(s => s.SentenceContent == sentence.SentenceContent))
                {
                    var res = await context.Sentences.AddAsync(sentence);
                    await context.SaveChangesAsync();
                    s = res.Entity;
                }
                return s;
            }
        }

        //public Task UpdateSimilar(List<TempModle> tempModels)
        //{
        //    using (var context = new IdiomContext())
        //    {
        //        int i = 0;
        //        tempModels.ForEach(t =>
        //        {
        //            i++;
        //            var idiomModel = context.IdiomModels.Single(idio => idio.Character == t.Character);
        //            idiomModel.Similar = new List<IdiomModel>();
        //            t.Similar.ForEach(s => {
        //                var idioSim = context.IdiomModels.Where(idio => idio.Character == s).ToList();

        //            if (idioSim != null)
        //                {
        //                    idiomModel.Similar.AddRange(idioSim);
        //                }


        //            });

        //            Console.WriteLine(i.ToString() + ":" + idiomModel.Character);
        //            context.Update(idiomModel);

        //        });

        //        context.SaveChanges();
        //        return Task.CompletedTask;
        //    }
        //}

        //public Task UpdateRelevant(List<TempModle> tempModels)
        //{
        //    using (var context = new IdiomContext())
        //    {
        //        int i = 0;
        //        tempModels.ForEach(t =>
        //        {
        //            i++;
        //            var idiomModel = context.IdiomModels.Single(idio => idio.Character == t.Character);
        //            idiomModel.Relevant = new List<IdiomModel>();
        //            t.Similar.ForEach(s => {
        //                var idioSim = context.IdiomModels.Where(idio => idio.Character == s).ToList();
        //                Console.WriteLine("添加:" + s);
        //                if (idioSim != null)
        //                {
        //                    idiomModel.Relevant.AddRange(idioSim);
        //                }


        //            });

        //            Console.WriteLine(i.ToString() + ":" + idiomModel.Character);
        //            context.Update(idiomModel);

        //        });

        //        context.SaveChanges();
        //        return Task.CompletedTask;
        //    }
        //}
    }
}
